/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@import "./../../../public/stylesheets/variables.scss";

$btn-content-padding: 10px 12px;
$btn-content-padding-with-border: 9px 11px;

@mixin active-focus-shadows(
    $focus: (0 0 5px #095d9a, 0 0 5px #095d9a),
    $active: (inset 0 1px 3px 0 rgba(0, 0, 0, 0.5))
) {
    &.focus, &:focus {
        box-shadow: $focus;
    }

    &.active, &:active {
        box-shadow: $active;
    }

    &:active, &.active {
        &:focus, &.focus {
            &:not([disabled]) {
                box-shadow: $focus, $active;
            }
        }
    }
}

.btn-ignite {
    $icon-margin: 8px;

    display: inline-flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    box-sizing: border-box;
    margin: 0;
    padding: $btn-content-padding;

    border: none;
    border-radius: $ignite-button-border-radius;
    text-align: center;
    outline: none;
    font-size: 14px;
    line-height: 16px;
    text-decoration: none;
    cursor: pointer;

    .icon {
        &, &-right, &-left {
            height: 16px;
        }

        &-right {
            margin-left: $icon-margin;
        }

        &-left {
            margin-right: $icon-margin;
        }
    }

    // Icon tweaks
    .icon.fa-caret-down {
        margin: 0 -3px;
    }

    .fa {
        line-height: inherit !important;
        font-size: 16px;
    }

    &[disabled] {
        -webkit-pointer-events: none;
        pointer-events: none;
    }

    [ignite-icon='plus'] {
        height: 12px;
        width: 12px;
    }
}

.btn-ignite--primary {
    $accent-color: $ignite-brand-primary;
    $text-color: white;

    background-color: $accent-color;
    color: white;

    &:hover, &.hover,
    &:active, &.active {
        &:not([disabled]) {
            color: white !important;
            background-color: change-color($accent-color, $lightness: 41%);
            text-decoration: none !important;
        }
    }

    // Override <a> styles
    &:focus {
        color: white !important;
        text-decoration: none !important;
    }

    @include active-focus-shadows();

    &[disabled] {
        color: transparentize($text-color, 0.5);
        background-color: change-color($accent-color, $lightness: 77%);
    }
}

.btn-ignite--primary-outline {
    $accent-color: $ignite-brand-primary;
    $hover-color: change-color($accent-color, $lightness: 36%);
    $disabled-color: #c5c5c5;

    border: 1px solid $accent-color;
    background: white;
    color: $accent-color;
    padding: $btn-content-padding-with-border;

    &:hover, &.hover,
    &:active, &.active {
        &:not([disabled]) {
            color: $hover-color;
            border-color: $hover-color;
        }
    }

    @include active-focus-shadows($active: inset 0 1px 3px 0 $hover-color);

    &[disabled] {
        color: $disabled-color;
        border-color: $disabled-color;
    }
}

.btn-ignite--success {
    $accent-color: $ignite-brand-success;
    $text-color: white;

    background-color: $accent-color;
    color: white;

    &:hover, &.hover, &:focus,
    &:active, &.active {
        &:not([disabled]) {
            color: white;
            background-color: change-color($accent-color, $lightness: 26%);
        }
    }

    @include active-focus-shadows();

    &[disabled] {
        color: transparentize($text-color, 0.5);
        background-color: change-color($accent-color, $saturation: 57%, $lightness: 68%);
    }
}

.btn-ignite--link-success {
    $accent-color: $ignite-brand-success;

    background: transparent;
    color: $accent-color;
    text-decoration: underline;

    &:hover, &.hover,
    &:active, &.active {
        &:not([disabled]) {
            color: change-color($accent-color, $lightness: 26%);
        }
    }

    &[disabled] {
        color: change-color($accent-color, $saturation: 57%, $lightness: 68%);
    }

}

@mixin btn-ignite--link-dashed(
    $color,
    $activeHover,
    $disabled
) {
    background: transparent;
    color: $color;

    span {
        background:
            linear-gradient(to right, $color, transparent),
            linear-gradient(to right, $color 70%, transparent 0%) repeat-x left bottom;
        background-size: 0, 8px 1px, 0, 0;
    }

    &:hover, &.hover,
    &:active, &.active {
        &:not([disabled]) {
            color: $activeHover;

            span {
                background:
                    linear-gradient(to right, $activeHover, transparent),
                    linear-gradient(to right, $activeHover 70%, transparent 0%) repeat-x left bottom;
                background-size: 0, 8px 1px, 0, 0;
            }
        }
    }

    &[disabled] {
        color: $disabled;

        span {
            background:
                linear-gradient(to right, $disabled, transparent),
                linear-gradient(to right, $disabled 70%, transparent 0%) repeat-x left bottom;
            background-size: 0, 8px 1px, 0, 0;
        }
    }

    @include active-focus-shadows($active: ());
}

.btn-ignite--link-dashed-success {
    $color: $ignite-brand-success;
    $activeHover: change-color($color, $lightness: 26%);
    $disabled: change-color($color, $saturation: 57%, $lightness: 68%);

    @include btn-ignite--link-dashed($color, $activeHover, $disabled);
}

.btn-ignite--link-dashed-primary {
    $color: $ignite-brand-primary;
    $activeHover: change-color($color, $lightness: 26%);
    $disabled: change-color($color, $saturation: 57%, $lightness: 68%);

    @include btn-ignite--link-dashed($color, $activeHover, $disabled);
}

.btn-ignite--link-dashed-primary {
    $color: $ignite-brand-primary;
    $activeHover: change-color($color, $lightness: 26%);
    $disabled: change-color($color, $saturation: 57%, $lightness: 68%);

    @include btn-ignite--link-dashed($color, $activeHover, $disabled);
}

.btn-ignite--link-dashed-secondary {
    $activeHover: change-color($ignite-brand-success, $lightness: 26%);
    @include btn-ignite--link-dashed($text-color, $activeHover, $gray-light);
}

.btn-ignite--secondary {
    background-color: white;
    color: #424242;
    border: 1px solid #c5c5c5;
    padding: $btn-content-padding-with-border;

    &:hover, &.hover,
    &:active, &.active {
        &:not([disabled]) {
            border-color: #c5c5c5;
            background-color: #eeeeee;
        }
    }

    @include active-focus-shadows();

    &[disabled] {
        opacity: 0.5;
    }
}

.btn-ignite-group {
    display: inline-flex;

    .btn-ignite:not(:first-of-type):not(:last-of-type) {
        border-radius: 0;
    }

    .btn-ignite:not(:last-of-type) {
        border-right-width: 1px;
        border-right-style: solid;
    }

    .btn-ignite:first-of-type:not(:only-child) {
        border-top-right-radius: 0;
        border-bottom-right-radius: 0;
    }

    .btn-ignite:last-of-type:not(:only-child) {
        border-top-left-radius: 0;
        border-bottom-left-radius: 0;
    }

    .btn-ignite.btn-ignite--primary {
        $line-color: $ignite-brand-primary;
        border-right-color: change-color($line-color, $lightness: 41%);
    }
    .btn-ignite.btn-ignite--success {
        $line-color: $ignite-brand-success;
        border-right-color: change-color($line-color, $saturation: 63%, $lightness: 33%);
    }
    .btn-ignite.btn-ignite--secondary + .btn-ignite.btn-ignite--secondary {
        border-left: 0;
    }

    &[disabled] .btn-ignite.btn-ignite--primary {
        border-right-color: change-color($ignite-brand-primary, $lightness: 83%);
    }

    &[disabled] .btn-ignite.btn-ignite--success {
        border-right-color: change-color($ignite-brand-success, $lightness: 83%);
    }
}

@mixin ignite-link($color, $color-hover) {
    color: $color;
    text-decoration: none;

    &:hover, &.hover,
    &:focus, &.focus {
        color: $color-hover;
        text-decoration: none;
    }
}

.link-primary {
    @include ignite-link(
        $color: $ignite-brand-primary,
        $color-hover: change-color($ignite-brand-primary, $lightness: 41%)
    );
}

.link-success {
    @include ignite-link(
        $color: $ignite-brand-success,
        $color-hover: change-color($ignite-brand-success, $lightness: 26%)
    );
}

.btn-ignite--link {
    background: transparent;

    @include ignite-link(
        $color: $ignite-brand-success,
        $color-hover: change-color($ignite-brand-success, $lightness: 26%)
    );
}

.btn-ignite--link {
    background: transparent;

    @include ignite-link(
        $color: $ignite-brand-success,
        $color-hover: change-color($ignite-brand-success, $lightness: 26%)
    );
}
